package com.example.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import org.apache.commons.lang3.RandomStringUtils;

/**
 * 创建随机数
 * 
 * @ClassName: IdUtils.java
 * @Description:
 * @author: xiaozhijun
 * @Date: 2016年10月12日 下午7:17:56
 */
public class IdUtils
{
	/**
	 * 创建指定长度不重复的id
	 * 
	 * @author xiaozhijun
	 * @Date: 2016年10月12日 下午7:18:08
	 * @param length
	 * @return
	 */
    public static String createId(int length)
    {
        String id = UUID.randomUUID().toString();
         
        id = DEKHash(id) + "";
         
        int diff = length - id.length();
        String randStr = RandomStringUtils.randomAlphabetic(length);
        for (int i = 0; i < diff; i++)
        {
            int randIndex = (int) (Math.random() * randStr.length());
            int index = (int) (Math.random() * id.length());
            id = id.substring(0, index) + randStr.charAt(randIndex) + id.substring(index, id.length());
        }
        return id;
    }
    
    
    
    public static String getDateId(){
    	String id="";
        //获取当前时间戳         
        SimpleDateFormat sf = new SimpleDateFormat("yyMMddHHmmss"); //12
        Date current = new Date();
        String temp = sf.format(current);    
        //获取6位随机数
        String timePart = ((current.getTime()%1000 + 1000)+"").substring(1);
        String randomPart = (   (int)((Math.random()+1)*100000) +"").substring(1);
        id=temp + timePart + randomPart;
        return id;
    }
    
    
    public static String getJhlzfId(){
    	String id="";
        //获取当前时间戳         
        SimpleDateFormat sf = new SimpleDateFormat("yyMMddHHmmss"); //12
        Date current = new Date();
        String temp = sf.format(current);    
        //获取3位随机数
        String randomPart = generateRandomNumber(3);
        id=temp +  randomPart;
        return id;
    }
    
    
    /**
     * 生成n位随机数
     *   
     * @author tcf
     * @Date 2018年5月31日 上午10:10:09
     * @param n
     * @return
     */
    protected static String generateRandomNumber(int n){  
        if(n<1){  
            throw new IllegalArgumentException("随机数位数必须大于0");  
        }  
        return ((int)((Math.random()+1)*Math.pow(10,n))+"").substring(1);  
    } 
    
    private static int DEKHash(String str)
    {
        int hash = str.length();
 
        for (int i = 0; i < str.length(); i++)
        {
            hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);
        }
 
        return (hash & 0x7FFFFFFF);
    }
    
    public static void main(String[] args) {
		System.out.println(IdUtils.createId(30));
	}
}